clear,clc;

% 初始数据
D = zeros(6);   % D是6个城市的距离矩阵
L = size(D,1);  % D的维度（城市数量），同时也是循环次数

% 用序号排列顺序表示圈的遍历顺序
c = [5, 1:4, 6, 5]; % 给出初始圈 5->1->2->3->4->6->5

% 改良圈
for k = 1:L
    flag = 0;   % 退出循环的判断标准
    for i = 1:L-2
        for j = i+2:L
            if D(c(i),c(j)+D(c(i+1),c(j+1))) ... 
                < D(c(i), c(i+1)) + D(c(j),c(j+1))
                c(i+1:j) = c(j:-1:i+1); % 对圈路径进行替换
                flag = flag + 1;
            end
        end
    end
    if flag == 0    % 没有新圈代替，即已经找到相对较优
        long = 0;
        for n = 1:L
            long = long+D(c(n),c(n+1)); % 求距离
        end
        circle = c;
        break;
    end
end